

pub fn literals_and_operators() {
    println!("-,*,!,&/&mut, +,-,*,/,%, &,|,!,^,>>,<<, ==,!=, &&,||, >,<,>=,<=,  ");
    // Integer addition
    println!("1 + 2 = {}", 1u32 + 2);

    // Integer subtraction
    println!("1 - 2 = {}", 1i32 - 2);
    // TODO ^ Try changing `1i32` to `1u32` to see why the type is important
    println!("5i32 * 2i32 = {}", 5i32 * 2i32);
    println!("5i32 / 2i32 = {}", 5i32 / 2i32);
    println!("同类型加减乘除没问题，不同类型除法不行（5f64/2i32报错）：5f64 / 2f64 = {}", 5f64 / 2f64);
    let mut ix:i32 = 10;
    let mut fx:f64 = 10.05;
    println!("xi32 += 2i32 //写法支持. ");
    ix+=2i32;
    println!("10xi32 += 2i32 = {:?}", ix);
    ix-=2i32;
    println!("12xi32 -= 2i32 = {:?}", ix);
    ix*=2i32;
    println!("10xi32 *= 2i32 = {:?}", ix);
    ix/=2i32;
    println!("20xi32 /= 2i32 = {:?}", ix);
    fx/=2.0f64;
    println!("10.05xf64 /= 2.0f64 = {:?}", fx);
    ix+=2i32;
    println!("xi32 ++ //写法不支持");
    println!("xi32+=1 = {}", ix);
    //println!("5i32 ^ 2i32 {}", 5i32 ^ 2i32);

    // Short-circuiting boolean logic
    println!("true AND false is {}", true && false);
    println!("true OR false is {}", true || false);
    println!("NOT true is {}", !true);

    // Bitwise operations
    println!("0011 AND 0101 is {:04b}", 0b0011u32 & 0b0101);
    println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101);
    println!("0011 XOR 0101 is {:04b}", 0b0011u32 ^ 0b0101);
    println!("1 << 5 is {}", 1u32 << 5);
    println!("0x80 >> 2 is 0x{:x}", 0x80u32 >> 2);

    // Use underscores to improve readability!
    println!("One million is written as {}", 1_000_000u32);
}